<?php
/**
 * Classe pour la manipulation de bases de données MySQL
 * Crée le : 06/01/2008
 * Auteur : David Mohamed
*/

class db
{
	/**
	 * 
	 * @var string
	 * @access private
	 */
        private $host;

        /**
	 *
	 * @var string
	 * @access private
	 */
        private $bdd;

        /**
	 *
	 * @var string
	 * @access private
	 */
        private $login;

        /**
	 *
	 * @var string
	 * @access private
	 */
        private $pass;
        
        /**
	 * 
	 * @var Ressource
	 * @access private
	 */
        private $id_conn;
	private static $_instance;

	/**
         * Constructeur de la base de données
         * @access private
         * @param string $host
         * @param string $bdd
         * @param string $login
         * @param string $pass
         * @param bool $auto_connect
         */
	private function __construct($host, $bdd, $login, $pass, $auto_connect = true)
	{
            $this->host=$host;
            $this->bdd=$bdd;
            $this->login=$login;
            $this->pass=$pass;
            if ($auto_connect)
            {
                $this->connect();
            }
	}

        /**
         * Recupére l'instance de base de données existante ou  le cas échant en créer une.
         * @access public
         * @return db instance de la bdd
         */
        public static function get_instance()
        {
            if(is_null(self::$_instance))
            {
                self::$_instance = new db(sitedef::Get_bdd_serv(), sitedef::Get_bdd_name(), sitedef::Get_bdd_user(), sitedef::Get_bdd_pass());
            }
            return self::$_instance;
        }

	/**
         *  Destructeur
         * @access public
         */
	public function __destruct() {
	}

	/**
         *  Fonction pour se connecter à la base de donn�es
         * @access private
         */
	private function connect() {
		$this->id_conn = mysql_connect($this->host,$this->login,$this->pass) or die('Impossible de se connecter &agrave; la base de donn&eacute;es.<br>');
		mysql_select_db($this->bdd, $this->id_conn) or die('Impossible de se s&eacute;lectionner la base de donn&eacute;es.');
	}

	/**
         *  Fonction pour se déconnecter de la base de donn?es
         * @access private
         */
	private function disconnect() {
		mysql_close($this->id_conn);
	}

        /**
         * Fonction pour exécuter une requête
         * @access public
         * @param string $query
         * @return Ressource
         */
	function query($query) {
		if ($this->id_conn && $query) return mysql_query($query);
	}

	/**
         * Fonction pour libérer le contenu de la ressource
         * @access private
         * @param Ressource $result
         */
	private function freemem($result) {
		if ($this->id_conn && $result) mysql_free_result($result);
	}

	/**
         * Fonction retournant le nombre de lignes concernées par la ressource
         * @access public
         * @param Ressource $result
         * @return int
         */
	function num_rows($result) {
		if ($this->id_conn && $result) return mysql_num_rows($result);
	}

	/**
         * Fonction retournant une ligne d'une ressource sous forme d'index
         * @param Ressource $result
         * @access public
         * @return Array
         */
	function fetch_row($result) {
		if ($this->id_conn && $result) return mysql_fetch_row($result);
	}

        /**
         * Fonction retournant une ligne d'une ressource sous forme de tableau associatif
         * @access public
         * @param Ressource $result
         * @return Array
         */
	function fetch_assoc($result) {
		if ($this->id_conn && $result) return mysql_fetch_assoc($result);
	}

        /**
         * Fonction qui retourne l'ensemble des lignes d'une ressource
         * @access public
         * @param Ressource $result
         * @param String $methode
         * @return Array
         */
        function like_array($result , $methode = "fetch_assoc")
        {
            $return = null;
            for($cpt=0;$cpt<$this->num_rows($result);$cpt++)
            {
                $return[$cpt] = $this->$methode($result);
            }
            return $return;
        }

        function change_db($db_host, $db_name, $db_user, $db_password)
        {
            return mysql_select_db( $db_name, $this->_instance );
        }

        function last_insert_id()
        {
            return mysql_insert_id($this->id_conn);
        }
};
?>